package araujoCoronelVillamayor.plantasVsZombies.appModelsArena;

import araujoCoronelVillamayor.plantasVsZombies.appModelsArena.SesionAppModel;
import araujoCoronelVillamayor.plantasVsZombies.domain.JardinZen;
import araujoCoronelVillamayor.plantasVsZombies.domain.Mejora;
import araujoCoronelVillamayor.plantasVsZombies.domain.Planta;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;

@Observable
@SuppressWarnings("all")
public class JardinZenAppModel implements Serializable {
  private List<Planta> _resultadosJardinZen;
  
  public List<Planta> getResultadosJardinZen() {
    return this._resultadosJardinZen;
  }
  
  public void setResultadosJardinZen(final List<Planta> resultadosJardinZen) {
    this._resultadosJardinZen = resultadosJardinZen;
  }
  
  private JardinZen _jardinZen;
  
  public JardinZen getJardinZen() {
    return this._jardinZen;
  }
  
  public void setJardinZen(final JardinZen jardinZen) {
    this._jardinZen = jardinZen;
  }
  
  private Mejora _mejoraSeleccionada;
  
  public Mejora getMejoraSeleccionada() {
    return this._mejoraSeleccionada;
  }
  
  public void setMejoraSeleccionada(final Mejora mejoraSeleccionada) {
    this._mejoraSeleccionada = mejoraSeleccionada;
  }
  
  private Planta _plantaSeleccionadaJardinZen;
  
  public Planta getPlantaSeleccionadaJardinZen() {
    return this._plantaSeleccionadaJardinZen;
  }
  
  public void setPlantaSeleccionadaJardinZen(final Planta plantaSeleccionadaJardinZen) {
    this._plantaSeleccionadaJardinZen = plantaSeleccionadaJardinZen;
  }
  
  private SesionAppModel _sesionAppModel;
  
  public SesionAppModel getSesionAppModel() {
    return this._sesionAppModel;
  }
  
  public void setSesionAppModel(final SesionAppModel sesionAppModel) {
    this._sesionAppModel = sesionAppModel;
  }
  
  public JardinZenAppModel(final SesionAppModel sesionParametro) {
    JardinZen _jardinZen = new JardinZen();
    this.setJardinZen(_jardinZen);
    this.setSesionAppModel(sesionParametro);
  }
  
  public int cantidadPlantasTerrestres() {
    JardinZen _jardinZen = this.getJardinZen();
    int _cantidadPlantasTerrestres = _jardinZen.cantidadPlantasTerrestres();
    return _cantidadPlantasTerrestres;
  }
  
  public int cantidadPlantasAcuaticas() {
    JardinZen _jardinZen = this.getJardinZen();
    int _cantidadPlantasAcuaticas = _jardinZen.cantidadPlantasAcuaticas();
    return _cantidadPlantasAcuaticas;
  }
  
  public void refreshJardinZen(final String tipoPlanta) {
    ArrayList<Planta> _arrayList = new ArrayList<Planta>();
    this.setResultadosJardinZen(_arrayList);
    SesionAppModel _sesionAppModel = this.getSesionAppModel();
    _sesionAppModel.refresh();
    JardinZen _jardinZen = this.getJardinZen();
    List<Planta> _search = _jardinZen.search(tipoPlanta);
    this.setResultadosJardinZen(_search);
  }
  
  public String tipoPlantaSeleccionada() {
    Planta _plantaSeleccionadaJardinZen = this.getPlantaSeleccionadaJardinZen();
    String _tipo = _plantaSeleccionadaJardinZen.getTipo();
    return _tipo;
  }
  
  public void aplicarMejora() {
    Mejora _mejoraSeleccionada = this.getMejoraSeleccionada();
    int _costo = _mejoraSeleccionada.getCosto();
    SesionAppModel _sesionAppModel = this.getSesionAppModel();
    int _recursos = _sesionAppModel.getRecursos();
    boolean _lessEqualsThan = (_costo <= _recursos);
    if (_lessEqualsThan) {
      Planta _plantaSeleccionadaJardinZen = this.getPlantaSeleccionadaJardinZen();
      Mejora _mejoraSeleccionada_1 = this.getMejoraSeleccionada();
      _plantaSeleccionadaJardinZen.agregarMejora(_mejoraSeleccionada_1);
      SesionAppModel _sesionAppModel_1 = this.getSesionAppModel();
      Mejora _mejoraSeleccionada_2 = this.getMejoraSeleccionada();
      int _costo_1 = _mejoraSeleccionada_2.getCosto();
      _sesionAppModel_1.quitarRecursos(_costo_1);
    } else {
      UserException _userException = new UserException("No se pueden aplicar m\u00E1s mejoras, sus recursos son insuficientes");
      throw _userException;
    }
  }
}
